package com.sikaryofficial.backend.message.product;

import com.sikaryofficial.backend.message.body.ActivityAttendMessage;
import com.sikaryofficial.backend.message.body.ActivityResultUserInfoMessage;
import com.sikaryofficial.backend.message.body.LotteryMessage;
import com.sikaryofficial.backend.message.body.ScanRegisterMessage;
import org.apache.rocketmq.common.message.MessageConst;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;

/**
 * 消息生产
 */
@Component
public class ProductProcess {

    @Autowired
    private MQProduct mqProduct;

    /**
     * 发送延迟消息
     *
     *    // MessageStoreConfig.java
     *       private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";//发消息时，设置delayLevel等级即可：msg.setDelayLevel(level)。level有以下三种情况：
     *       level == 0，消息为非延迟消息
     *       1<=level<=maxLevel，消息延迟特定时间，例如level==1，延迟1s
     *       level > maxLevel，则level== maxLevel，例如level==20，延迟2h
     *
     * @param message 消息
     * @return 是否发送成功
     */
    public boolean sendDelayMessage(ActivityAttendMessage message) {
        // 创建 Spring Message 对象
        Message<ActivityAttendMessage> springMessage = MessageBuilder.withPayload(message)
                // <X> 设置延迟级别为 1 秒后消费。
                .setHeader(MessageConst.PROPERTY_DELAY_TIME_LEVEL, "1")
                .build();
        // 发送消息
        return mqProduct.attendOutput().send(springMessage);
    }

    public boolean sendActivityResultMessage(ActivityResultUserInfoMessage message) {
        // 创建 Spring Message 对象
        Message<ActivityResultUserInfoMessage> springMessage = MessageBuilder.withPayload(message)
                // <X> 设置延迟级别为 1 秒后消费。
                .setHeader(MessageConst.PROPERTY_DELAY_TIME_LEVEL, "5")
                .build();
        // 发送消息
        return mqProduct.activityResultModifyOutput().send(springMessage);
    }

    /**
     * 发送注册消息
     *
     * @param message 消息
     * @return 是否发送成功
     */
    public boolean sendScanRegisterMessage(ScanRegisterMessage message) {
        // 创建 Spring Message 对象
        Message<ScanRegisterMessage> springMessage = MessageBuilder.withPayload(message).build();
        // 发送消息
        return mqProduct.scanRegisterOutput().send(springMessage);
    }

    /**
     * 发送抽检消息
     *
     * @param message 消息
     * @return 是否发送成功
     */
    public boolean sendLotteryMessage(LotteryMessage message) {
        // 创建 Spring Message 对象
        Message<LotteryMessage> springMessage = MessageBuilder.withPayload(message).build();
        // 发送消息
        return mqProduct.lotteryOutput().send(springMessage);
    }
}
